package geom

type Size struct {
	Width, Height float64
}

func (s Size) AsVec2() Vec2 {
	return Vec2{X: s.Width, Y: s.Height}
}

func (s Size) Sub(size Vec2) Size {
	s.Height -= size.Y
	s.Width -= size.X
	return s
}

type IntSize struct {
	Width, Height int
}

func (s IntSize) AsVec2() Vec2 {
	return Vec2{float64(s.Width), float64(s.Height)}
}

type Bounds struct {
	Min, Max Vec2
}

func GetBounds(p ...Point) Bounds {
	b := Bounds{
		Min: p[0].AsVec2(),
		Max: p[0].AsVec2(),
	}
	for _, v := range p[1:] {
		if v.X < b.Min.X {
			b.Min.X = v.X
		}
		if v.Y < b.Min.Y {
			b.Min.Y = v.Y
		}
		if v.X > b.Max.X {
			b.Max.X = v.X
		}
		if v.Y > b.Max.Y {
			b.Max.Y = v.Y
		}
	}
	return b
}

func (b Bounds) Size() Size {
	return Size{b.Max.X - b.Min.X, b.Max.Y - b.Min.Y}
}
